var SelectList = []//(用于记录被选中的行)
var $table = $('#table');
var overAllIds = new Set();                // 全局保存选中行的对象
$(function () {
    vm.init();
    var res = "";
    $(function () {
        initTable();
    });
    function initTable() {
        //先销毁表格
        $table.bootstrapTable('destroy');
        $table.bootstrapTable({
            url: "sys/generator/listAll",
            data:res,
            idField: 'id',
            dataType: "json",
            columns: [
                { field: 'check',  checkbox: true, formatter: function (value, row, index) {
                    if (row.check == true) {
                        // console.log(row.serverName);
                        //设置选中
                        return {  checked: true };
                    }
                }
                },
                { field: 'tableName',  title: '表名' },
                { field: 'comments',  title: '备注', align: 'center' },
                { field: 'createTime', title: '创建时间' ,align: 'center'}
            ],

            locale: "zh-CN",
            //pagination: true, //是否显示分页（*）
            paginationDetailHAlign:' right',
            //sidePagination: "server", //分页方式：client客户端分页，server服务端分页（*）
            //pageNumber: 1, //初始化加载第一页，默认第一页
            //pageSize: 5, //每页的记录行数（*）
            //pageList: [5,10,20, 25],
            queryParams: function(params) {
                return {
                    //pageSize: params.limit,
                    //pageNum: params.offset,
                    "databaseId":vm.select_list
                };
            },
            //在哪一列展开树形
            treeShowField: 'tableName',
            //指定父id列
            parentIdField: 'pid',
            responseHandler:function(result) {
                return {
                    "total":  result.total,
                    "rows":  result.rows //数据
                }
            },
            onResetView: function(data) {
                $table.treegrid({
                    initialState: 'collapsed',// 所有节点都折叠
                    // initialState: 'expanded',// 所有节点都展开，默认展开
                    treeColumn: 1,
                    //expanderExpandedClass: 'glyphicon glyphicon-minus',  //图标样式
                    //expanderCollapsedClass: 'glyphicon glyphicon-plus',
                    onChange: function() {
                        $table.bootstrapTable('resetWidth');
                    }
                });

                //只展开树形的第一级节点
                //$table.treegrid('getRootNodes').treegrid('expand');

            },
            onCheck:function(row){
                var datas = $table.bootstrapTable('getData');
                // 勾选子类
                selectChilds(datas,row,"id","pid",true);
                // 勾选父类
                selectParentChecked(datas,row,"id","pid")
                // 刷新数据
                $table.bootstrapTable('load', datas);
            },
            onUncheck:function(row){
                var datas = $table.bootstrapTable('getData');
                selectChilds(datas,row,"id","pid",false);
                // 刷新数据
                $table.bootstrapTable('load', datas);
            },
            onLoadSuccess: function (res) {//可不写
                //加载成功时
                console.log(res);
            },
            onLoadError: function (statusCode) {
                return "加载失败了";
            },
            formatNoMatches: function () {
                //没有匹配的结果
                return '无符合条件的记录';
            }
        });
    }
    /**
     * 选中父项时，同时选中子项
     * @param datas 所有的数据
     * @param row 当前数据
     * @param id id 字段名
     * @param pid 父id字段名
     */
    function selectChilds(datas,row,id,pid,checked) {
        for(var i in datas){
            if(datas[i][pid] == row[id]){
                datas[i].check=checked;
                selectChilds(datas,datas[i],id,pid,checked);
            };
        }
    }

    /**
     * 选中子项时，同时选中父项
     * @param datas 所有的数据
     * @param row 当前数据
     * @param id id 字段名
     * @param pid 父id字段名
     */
    function selectParentChecked(datas,row,id,pid){
        for(var i in datas){
            if(datas[i][id] == row[pid]){
                datas[i].check=true;
                selectParentChecked(datas,datas[i],id,pid);
            };
        }
    }

    var old = null; //用来保存原来的对象
    $("input[name='redis']").each(function(){//循环绑定事件
        if(this.checked){
            old = this; //如果当前对象选中，保存该对象
        }
        this.onclick = function(){
            if(this == old){//如果点击的对象原来是选中的，取消选中
                this.checked = false;
                old = null;
            } else{
                old = this;
            }
        }
    });

});

var vm = new Vue({
	el:'#rrapp',
	data:{
		q:{
			tableName: null
		},
        //接收后端的返回结果集
        result_list:[],
        //接收已经选择的结果集
        select_list:[]
	},
    //监听部分
    watch: {
        /**
         * 监听后端的返回结果集
         */
        result_list:function () {
            this.$nextTick(function () {
                $('#sel').selectpicker('refresh');
            })
        },
        /**
         * 监听已经选择的结果集
         */
        select_list:function () {
            console.log(this.select_list)
        }
    },
	methods: {
		query: function () {
		    if(vm.select_list.length == 0){
                alert("请选择数据库");
                return;
            }
            $table.bootstrapTable('refresh', {
                query:
                    {
                        "databaseId":vm.select_list
                    }
            });
		},
		generator: function() {
            var selRows = $table.bootstrapTable("getSelections");
            if(selRows.length == 0){
                alert("请至少选择一行");
                return;
            }
            var tablesObj = {};
            var postData = "";
            $.each(selRows,function(i) {
                if(this.pid == 0){
                    if(i == 0) {
                        postData += this.id;
                    }else{
                        postData += ";" + this.id;
                    }
                }else{
                    postData += ","+this.tableName;
                }
            });
            $('#projectEditForm').formReset();
            $("#operateMode").val('add');
            $("#tableNames").val(postData);
            $('#projectEditModal').modal({backdrop: false});
            $("#submitProject").show();
		},
        /**
         * 初始化数据，向后端请求结果
         */
        init:function () {
            var self = this;
            //代替http请求
            $.post("/sys/database/select1", function (result) {
                if (typeof(result) == "string") {
                    result = $.parseJSON(result);
                }
                if (result.code == 0) {
                    self.result_list = result.databases;
                }
            });
            $('#sel').selectpicker({
                actionsBox: false,
                selectAllText: "全选",
                deselectAllText: "取消全选",
                width: 400
            })
        }
	}
});

$('#submitBtn').on('click', function () {
    var str = "";
    var checkValues = [];
    $(".checkbox-inline input").each(function(){
        if(true == $(this).is(':checked')){
            checkValues.push($(this).val());
        }
    });
    var parentProjectName = $("#parentProjectName").val();
    if(parentProjectName.replace(/(^\s*)|(\s*$)/g, "").length ==0){
        alert("父级项目名称不能为空");
        return;
    }
    var projectName = $("#projectName").val();
    if(projectName.replace(/(^\s*)|(\s*$)/g, "").length ==0){
        alert("子项目名称不能为空");
        return;
    }
    var packageName = $("#packageName").val();
    if(packageName.replace(/(^\s*)|(\s*$)/g, "").length ==0){
        alert("项目包名不能为空");
        return;
    }
    var moduleName = $("#moduleName").val();
    if(moduleName.replace(/(^\s*)|(\s*$)/g, "").length ==0){
        alert("模块名称不能为空");
        return;
    }
    var tableNames = $("#tableNames").val();
    $("#submitBtn").button("loading");
    $('#projectEditModal').modal('hide');
    location.href = "sys/generator/codes?tables=" + tableNames+"&parentProjectName="+parentProjectName+"&projectName="+projectName+"&packageName="+packageName+"&moduleName="+moduleName+"&checkValues="+checkValues.join(",");
    $("#submitBtn").button("reset");
});